package 第3次作业;

// 鸭子父类
class Duck {
    // 属性
    private String color;
    private double heavy;

    // 父类构造方法
    public Duck(String color, double heavy) {
        this.color = color;
        this.heavy = heavy;
    }

    // 飞行方法（将在子类中重写）
    public void fly() {
        System.out.println("普通鸭子在低空飞行");
    }

    // 鸣叫方法（将在子类中重写）
    public void quack() {
        System.out.println("普通鸭子嘎嘎叫");
    }

    // 获取属性的方法
    public String getColor() {
        return color;
    }

    public double getHeavy() {
        return heavy;
    }

    // 设置重量的方法
    public void setHeavy(double heavy) {
        this.heavy = heavy;
    }
}

// 野鸭子类
class WildDuck extends Duck {
    // 子类构造方法，初始化属性
    public WildDuck(String color, double heavy) {
        super(color, heavy);
    }

    // 重写飞行方法
    @Override
    public void fly() {
        System.out.println("野鸭飞得又高又远");
    }

    // 重写鸣叫方法
    @Override
    public void quack() {
        System.out.println("野鸭发出清脆的嘎嘎声");
    }

    // 重载setHeavy方法（接受整数类型）
    public void setHeavy(int heavy) {
        // 调用父类的setHeavy方法（double类型）
        super.setHeavy(heavy);
    }
}

// 家鸭子类
class DomesticDuck extends Duck {
    // 子类构造方法，初始化属性
    public DomesticDuck(String color, double heavy) {
        super(color, heavy);
    }

    // 重写飞行方法
    @Override
    public void fly() {
        System.out.println("家鸭飞不高，只能短距离扑腾");
    }

    // 重写鸣叫方法
    @Override
    public void quack() {
        System.out.println("家鸭发出低沉的嘎嘎声");
    }

    // 重载setHeavy方法（接受字符串类型，需符合数字格式）
    public void setHeavy(String heavyStr) {
        try {
            double heavy = Double.parseDouble(heavyStr);
            super.setHeavy(heavy);
        } catch (NumberFormatException e) {
            System.out.println("重量格式错误，无法设置");
        }
    }
}
